/* myVideo 视频播放器上下文控制和api方法 */
export default {
	data() {
		return {
			// 创建并返回 myvideo 上下文
			videoContext:null,
		}
	},
	async mounted(){
		/* 2022-0117 - 新增优化 （维护者 => 网友 昵称：z） 
		 * 主要适配：subnvue 才需要换成 this.$refs.myVideo
		 */ 

		// #ifdef APP-PLUS
		this.videoContext = this.$refs.myVideo
		// #endif

		// #ifndef APP-PLUS
		this.videoContext = uni.createVideoContext('myVideo',this)
		// #endif
		
	},
	watch:{
		isPlay:{
			handler(newisPlay,oldisPlay){
				// 将视频是否播放状态回调出去
				let e = {
					Events: 'PlayStatus',//标记>>是否播放状态
					isPlay: newisPlay,
					msg: '是否播放状态 true：播放中 、 false: 暂停中'
				}
				this.$emit('changeMyVideo',e)
			},
			immediate: true
		},
	},
	methods:{
		// 播放
		play(event){
			/* 2022-0117 - 新增优化 （维护者 => 网友 昵称：z） 
			* 主要适配：subnvue 用于解决无src时候无法播放问题
			*/ 

			// 无播放地址的时候则返回
			if (!this.src) return

			this.videoContext.play()

			// 迁移到这里，可修复问题(用于手动暂停时显示的内容，如贴片广告等)
			this.isPlay = true
			// 显示暂停按钮，隐藏播放按钮
			this.isPlaybtn = true

			/* 2022-0112新增优化 （维护者 => 网友 昵称：z）
			 * 必须在播放后调用，否则在有的设备上会导致视频无法播放
			 */
			// 重置倍速和倍速索引
			if (event!==undefined && event.Reset_backRate == true){
				// 重置倍速=1.0 和 倍速索引=3
				this.playbackRate(1.0,3)
			}
		},
		// 暂停
		pause(){
			this.videoContext.pause()
			// 迁移到这里，可修复问题(用于手动暂停时显示的内容，如贴片广告等)
			this.isPlay = false
			// 显示播放按钮，隐藏暂停按钮
			this.isPlaybtn = false
		},
		// 跳转到指定位置，单位 s
		seek(e){
			this.videoContext.seek(e)
			// 3.5.1 版本需要新增text参数，用于是否显示气泡文字提示，用于组件外调佣。
			// 3.5.1或者2 版本需要新增 滚动文字（跑马灯、通告栏）
		},
		// 停止视频(微信小程序)/APP是重新播放（但要再调用play方法，重新播放方法封装在下面）
		stop(e){
			this.videoContext.stop(e)
		},
		// 设置倍速播放，支持的倍率有 0.5/0.8/1.0/1.25/1.5/2.0 倍速 
		playbackRate(e,index){
			// 获取倍数信息
			//console.log('倍速 = '+e)
			//设置倍数
			this.videoContext.playbackRate(e*1)
			// 设置选中的倍速索引（倍数-抽屉面板）
			//this.besuIndex = index//
			this.besuIndex = index || this.playbackRate_besuIndex(e)//设置选中的倍数item
			if (e==1.0 || e=='正常'){
				e = '正常'
			}else {
				e = e+'X'
			}
			// 设置选中的倍速text
			this.besuText = e //用于控制面板bottom底部显示
			
			/* 
				// 3.5.0 新增事件
				1. 判断抽屉item面板是否开启 和 
				2. 判断是否启用在切换倍速后自动关闭倍速抽屉面板
				3. 如果两个条件都是true，则启用自动关闭抽屉（此时的情况一定在抽屉面板打开状态下）
			 */
			if (this.Config.playbackRate_closeDrawerItem == true && this.isopenDrawerItem == true) {
				// 关闭抽屉面板
				this.closeDrawerItem()
			}
			
		},
		// 发送弹幕，danmu 包含3个属性 text, color, time （包含属性看 assets/DanmuListData.js）
		sendDanmu(event){
			//this.videoContext.sendDanmu(event)
			// uni-api
			/* this.videoContext.sendDanmu({
		        text: event.text,
				time: event.time,
				color: event.color || this.getRandomColor()
		    }) */
			
			/* =============================
			 * =  直接调用弹幕组件的ref方法  =
			 * =============================
			 */ 
			// 未开启弹幕时，直接返回，不向下执行
			if (this.video_isDanmu==false) return
			// 1. 设置弹幕item数据（video.js）
			this.SetsendDanmuObj_api(event)
			// 2. 获取弹幕item数据
			let item = this.sendDanmuObj
			// 3. 调用弹幕组件 用户手动 发送弹幕方法
			this.$refs.Fatbarrage.add(item)
		},
		// 进入全屏，可传入{direction}参数，详见 video 组件文档
		goFullScreen(e){
			// #ifdef APP-PLUS
			// 解除锁定屏幕方向
			plus.screen.unlockOrientation();
			// 锁定屏幕方向为横屏正方向或反方向，根据设备重力感应器自动调整；
			plus.screen.lockOrientation("landscape");
			// 隐藏系统虚拟按键（导航栏）：https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.hideSystemNavigation
			plus.navigator.hideSystemNavigation();
			// 3.5.1 版本新增 2022-0313
			// 是否开启video进入全屏时启用游戏模式的全屏
			if (this.Config.goFull_GameModeFull == true) {
				// 设置为游戏类应用的全屏模式，可隐藏安卓上的状态栏：https://www.html5plus.org/doc/zh_cn/navigator.html
				plus.navigator.setFullscreen(true);
			}
			
			// 隐藏状态栏，仅在iOS全屏下有效
			if (this.platform_mobile == 'ios'){
				// 隐藏状态栏
				this.videoContext.hideStatusBar();
			}
			// #endif
			
			/* 3.5.1 版本新增
			 * 修复进入全屏时带方向值部分设备不生效或可能导致闪退的问题。
			 */
			if (e!==undefined && e.direction!==undefined){
				// 进入全屏(带方向值)
				this.videoContext.requestFullScreen(e);
			}else {
				// 进入全屏(不带方向值)
				this.videoContext.requestFullScreen({direction: -90});
			}

			// 最后一步再设置为进入全屏状态 - 2021-10-27新增补丁
			this.isFullScreenChange = true
		},
		// 退出全屏 
		async exitFullScreen(){
			// [新版本] 2021-1221调整，退出全屏转同步任务，因为退出全屏和设置屏幕方向是异步的，安卓无问题，iPhoneX有时候退出全屏比设置竖屏快，这是不对的
			// (iOS平台) 2021-1219新增代码 ios必须在退出全屏前设置屏幕方向为竖屏，否则退出的时候，手机屏幕方向有几率还是横屏的
			// #ifdef APP-PLUS
			// 解除锁定屏幕方向
			plus.screen.unlockOrientation();
			// 锁定屏幕方向为竖屏（竖屏正方向或反方向，根据设备重力感应器自动调整）
			plus.screen.lockOrientation("portrait");
			// 只在iOS平台 （安卓和苹果 机制不一样）
			if (this.platform_mobile == 'ios'){
				// 显示状态栏
				this.videoContext.showStatusBar()
			}
			// #endif
			
			// (Android平台) 2021-1216调整代码顺序 1.先退出全屏 2.再设置屏幕方向
			
			// 退出全屏
			this.videoContext.exitFullScreen()
			
			// #ifdef APP-PLUS
			// 锁定屏幕方向为竖屏 (再次设定一次，不然有时候ios有问题)
			plus.screen.lockOrientation("portrait-primary");
			// 显示系统虚拟按键（导航栏）（可能部分机型上控制台调试会报错，只是可能）
			plus.navigator.showSystemNavigation();
			// 3.5.1 版本新增 2022-0313
			// 是否开启video进入全屏时启用游戏模式的全屏
			if (this.Config.goFull_GameModeFull == true) {
				// 设置为非全屏模式，可显示安卓上的状态栏：https://www.html5plus.org/doc/zh_cn/navigator.html
				plus.navigator.setFullscreen(false);
			}

			// #endif
			
			// 最后一步再设置为退出全屏状态 - 2021-10-27新增补丁
			this.isFullScreenChange = false
		},
		// 销毁播放器
		DeletePlayer(){
			this.isVideoPlayer = false
			//console.log("销毁播放器成功")
		},
		// 创建播放器(只能用于销毁播放器后再创建)
		CreatePlayer(){
			this.isVideoPlayer = true
			//console.log("创建播放器成功")
		},
		// 下一集
		nextPlay(){
			// 获取下一集的视频索引
			let index = Number(this.VideoSrcIndex+1)
			// 获取下一集的视频信息
			let item = this.VideoSrcList[index]
			// 将视频索引回调出去
			let e = {
				Events:'VideoSrcIndex',//标记>>改变视频索引时
				item,//当前视频信息
				index,//当前视频索引
				msg:'下一集'
			}
			this.$emit('changeMyVideo',e)
		},
		// 从第几个视频开始播放
		IndexPlay(index){
			// 获取下一集的视频索引
			//let index = index
			// 获取下一集的视频信息
			let item = this.VideoSrcList[index]
			// 将视频索引回调出去
			let e = {
				Events:'VideoSrcIndex',//标记>>改变视频索引时
				item,//当前视频信息
				index,//当前视频索引
				msg:'下一集'
			}
			this.$emit('changeMyVideo',e)
		},
		// 重新播放（单集播放）
		restartPlay(){
			this.stop()
			this.play()
		},
		// 手动刷新当前视频的事件 （也用于 => 当视频播放出错时，显示刷新按钮）
		refreshVideo(index){
		    // 判断是否是直播，如果是直播，则执行 重新播放 来刷新即可，因为直播没有时间
			if (this.islive_player==true){
				// 直播
				this.restartPlay()
				console.log('重新播放')
			}else {
				// 点播
				console.log('刷新第'+ Number(index+1) +'视频')
				/* 2021-1020-代码逻辑调整-采用Promise方式 */
				// 执行获取网络类型（1，提示用户现在的网络状态）
				this.getNetworkType()
				// 执行监听网络状态（2，当有网络时自动恢复播放）
				this.getNetworkStatusChange()
				// 显示loading
				this.isVideoShowLoadingCount.isVideoShowLoading = true
				// 关闭播放器背景
				this.isVideoShowonReady_bg = false
				// 关闭Error
				this.isVideoShowErrorCount.isVideoShowError = false
				// 自动刷新当前视频并播放
				this.NetworkhuifuVideo()
				//
			}
		},
	}
}